#ifndef PLAYCENTERPANELBASE_H
#define PLAYCENTERPANELBASE_H

#include <gameplaycenterpanel.h>
#include <QPushButton>
#include <struct_enum.h>
#include <QLCDNumber>
#include <QTimer>
#include <QDebug>
#include <poker.h>
#include <QLabel>
#include <QList>
//运行阶段

class PlayCenterPanelBase : public GamePlayCenterPanel
{
    Q_OBJECT
private:
    QPushButton * out;//出牌按钮
    QPushButton * no_out;//不出按钮
    QPushButton * tips;//提示按钮
    int step_button;//按钮步长
    int offset_height;//偏移高度
    QTimer * timer;//记录出牌倒计时时间
    QLCDNumber * lcd;//lcd 灯
    int time;//正常的倒计时时间单位ms
    int no_time;//不正常的倒计时时间单位ms
    player_type player_time;//现在是哪个玩家
    //出牌缓冲
    QList<Poker*> own_out_poker;//自己将要出的牌排序
    QVector<Poker*> last_out_all_poker;//上家出过的牌
    QVector<Poker*> next_out_all_poker;//下家出过的牌
    QVector<Poker*> need_cmp_poker;//需要比较的牌
    QList<Poker*> my_out_all_poker;//自己出过的牌
    //提示标签
    QLabel * last_no_out_label ;//不出标签
    QLabel * next_no_out_label ;//不出标签
    QLabel * my_no_out_label ;//不出标签
    QLabel * last_number_label;//上家的牌个数
    QLabel * next_number_label;//下家的牌个数
    QLabel * my_number_label;//自己的牌个数
    //记录一开始的上家牌的数量
    int last_number_temp ;
    int next_number_temp ;
    //不出的个数
    int no_out_count;
    bool isOutPoker;//是否出过牌
    //测试代码
    bool isEnd;//判断出牌是否结束
    bool isOutAll;//判断是否出牌结束
public:

    PlayCenterPanelBase(QWidget *parent,int make[],QVector<Poker*> & own_poker_v,QVector<Poker*> & other_poker_v,int *last_numer_v ,int *next_number_v,int step = 10,int offset_height_v = 30,int time_v = 20,int no_time_v = 3);
    ~PlayCenterPanelBase();
    void init();//初始化
    void button_init();//初始化按钮
    player_type run_game();//运行,返回胜利玩家
    //显示隐藏其他按钮
    void set_show_other_button(bool isOK) {
        if(isOK){
            this->no_out->show();
            this->tips->show();
        }else{
            this->no_out->hide();
            this->tips->hide();
        }
    }

    //设置标签
    void set_all_label();

    //根据玩家类型显示显示器并开始计时，并根据玩家类型发送信号
    void show_LCD(player_type player_type_v);

    void last_out_card(const QVector<int> & poker_number);//上家出牌
    void next_out_card(const QVector<int> & poker_number);//下家出牌

    void add_poker_connection();//给牌添加信号
    bool test_can_out() const;//判断出牌序列是否能够出牌

    void close_lcd_timer();//关闭lcd和计时器
    void no_out_poker();//不出牌

public slots:
    void add_out_poker(bool isUp,Poker * poker);//添加一张牌到对应玩家序列出牌序列
    void change_lcd_num();//改变lcd的显示数值
    void out_poker();//出牌
signals:
    void my_out_card_end();//自己的出牌时间到了,会发出这个信号
    void other_out_card_end();//其他玩家的出牌时间到了,会发出这个信号
private:
    bool isSame(int n) const;//判断出牌的n个是否一样

};

#endif // PLAYCENTERPANELBASE_H
